#pragma once

// 如果新建的是CPP文件，FFmpeg是纯C编写的，如果C++引用的话一定要加上 extern "C"
extern "C"
{
#include <libavformat/avformat.h>
#include <libavdevice/avdevice.h>
#include <libavcodec/avcodec.h>
#include <libavutil/avutil.h>
#include <libavfilter/avfilter.h>
#include <libswscale/swscale.h>
#include <libavutil/opt.h>
#include <libavutil/time.h>
}

#include <thread> 
#include "mq_msg.h"

class TmpRtmpStreamTest{
public:
    TmpRtmpStreamTest();
    int Start();
    void run();

private:
    //输入封装器
    AVFormatContext* infmt_ctx;
    
    //输出封装器
    AVFormatContext* outfmt_ctx;

    //对流（Stream）的封装和抽象
    AVStream *in_stream;
    AVStream *out_stream;

    AVCodec* encodec;
    AVCodec* decodec;
    
    AVCodecContext* encodec_ctx;
    AVCodecContext* decodec_ctx;

    AVPacket *dec_pkt, enc_pkt;

    struct SwsContext *img_convert_ctx;

    AVFrame *pFrameYUV,*pFrame;

    //每一帧编号
    int vpts;

    //标记
    int got_picture, enc_got_frame;

    MqMsgRecv mq_recv;

    std::thread __rtmp_thread; 
};
